home *** CD-ROM | disk | FTP | other *** search
/ System Booster / System Booster.iso / Texteditors / Origami / Sources / src / lib / getsysfile.c < prev    next >
Encoding:
C/C++ Source or Header  |  1996-09-27  |  3.0 KB  |  154 lines

  1. /*{{{}}}*/
  2. /*{{{  includes*/
  3. #include <limits.h>
  4. #include <unistd.h>
  5. #include <stdio.h>
  6. #include <string.h>
  7.  
  8. #include <h/envvar_str.h>
  9. #include <h/os.h>
  10. #include <lib/ori_rc_lib.h>
  11. #include <lib/ori_add_lib.h>
  12. #include <h/getmsg.h>
  13. /*}}}  */
  14.  
  15. /*{{{  get_prg_name*/
  16. char *get_prg_name(char *arg0)
  17. {
  18.   if (arg0)
  19.    { char *p;
  20.  
  21.      /*{{{  arg0 behind last path separator*/
  22.      for (p=arg0;;)
  23.       { switch (*p++)
  24.          { case PATH_C:
  25.               arg0=p;
  26.            default:
  27.               continue;
  28.            case '\0':
  29.               break;
  30.          }
  31.         break;
  32.       }
  33.      /*}}}  */
  34.      /*{{{  cut at first .*/
  35.      if (arg0[0]=='.')
  36.         arg0++;
  37.      for (p=arg0;;p++)
  38.       { switch (*p)
  39.          { case '.':
  40.               *p='\0';
  41.            case '\0':
  42.               break;
  43.            default:
  44.               continue;
  45.          }
  46.         break;
  47.       }
  48.  
  49.      /*}}}  */
  50.    }
  51.   else
  52.      arg0="";
  53.  
  54.   return(arg0);
  55. }
  56. /*}}}  */
  57. /*{{{  path_file_test*/
  58. boolean path_file_test
  59.  ( char * const buff,
  60.    char **dir,
  61.    char const * const pre,
  62.    char const * const post
  63.  )
  64. {
  65.   int l = _POSIX_PATH_MAX;
  66.  
  67.   /*{{{  cat first part of path to buff*/
  68.   { char *s = *dir, *d = buff, c;
  69.  
  70.     while ((c= *s)&&(c!=LIST_C)&&(c!=LIST_C_1))
  71.      { if (l--) *d++=c;
  72.        s++;
  73.      }
  74.     *d='\0';
  75.     *dir = c ? s+1 : s;
  76.   }
  77.   /*}}}  */
  78.   /*{{{  maybe add slash*/
  79.   if (*buff && l)
  80.    { strcat(buff,PATH_SEP);
  81.      l--;
  82.    }
  83.   /*}}}  */
  84.   /*{{{  add pre post*/
  85.   if ((l-=strlen(pre))>0)
  86.    { strcat(buff,pre);
  87.      if ((l-=strlen(post))>0)
  88.         strcat(buff,post);
  89.    }
  90.   /*}}}  */
  91.   home_expand(buff);
  92.  
  93.   return(!access(buff,R_OK));
  94. }
  95. /*}}}  */
  96. /*{{{  get_system_filename*/
  97. char *get_system_filename
  98.  ( char const * const ori_path,
  99.    char const * base,
  100.    char const * const ending,
  101.    char * const name_default
  102.  )
  103. {
  104.   static char keyfile[_POSIX_PATH_MAX+1];
  105.   static char std_basename[]=STD_BASENAME;
  106.   int prefix=!IS_ROOT((char*)base);
  107.   int msg_wished;
  108.  
  109.   /*{{{  try all path in list*/
  110.   {
  111.     char *s=prefix?(char*)ori_path:(char*)"";
  112.  
  113.     do
  114.        if (path_file_test(keyfile,&s,base,ending))
  115.           return(keyfile);
  116.     while (*s);
  117.   }
  118.   /*}}}  */
  119.   /*{{{  for msg, try standard in ORIGAMI_PATH/STD_BASENAMEmsg*/
  120.     if ((msg_wished=!strcmp(ending,MSG_ENDING)))
  121.     /*{{{  try all path in list*/
  122.      { char *s=(char*)ori_path;
  123.  
  124.       do
  125.           if (path_file_test(keyfile,&s,std_basename,ending))
  126.              return(keyfile);
  127.       while (*s);
  128.     }
  129.     /*}}}  */
  130.   /*}}}  */
  131.   keyfile[0]='\0';
  132.   if (name_default)
  133.    /*{{{  create default name for error message*/
  134.    { if (msg_wished)
  135.         base=std_basename;
  136.      else
  137.       { strcpy(keyfile+1,base); base=keyfile+1; }
  138.      if (msg_wished || prefix)
  139.       { name_default[0]='[';
  140.         strcat(name_default+1,ori_path);
  141.         strcat(name_default,"]"PATH_SEP);
  142.         strcat(name_default,base);
  143.         strcat(name_default,ending);
  144.       }
  145.      else
  146.       { strcpy(name_default,base);
  147.         strcat(name_default,ending);
  148.       }
  149.    }
  150.    /*}}}  */
  151.   return(keyfile);
  152. }
  153. /*}}}  */
  154.